// utils/request.js
import { base } from "./base";
// 默认的最大重试次数
const MAX_RETRIES = 3;

/**
 * 发起一个HTTP请求，并带有重试机制
 * @param {string} url - 请求的URL
 * @param {string} method - 请求方法（GET, POST, PUT, DELETE等）
 * @param {Object} data - 请求的数据（仅适用于POST, PUT等方法）
 * @param {Object} header - 请求头
 * @param {number} retries - 当前重试次数（默认0，内部使用）
 * @returns {Promise} - 返回Promise对象
 */
function request(url, method = 'GET', data = {}, header = {}, retries = 0) {
    return new Promise((resolve, reject) => {
        uni.request({
            url: base + url,
            method,
            data,
            header,
            success: (res) => {
				resolve(res.data);
				return;
                // 判断请求是否成功（根据业务逻辑定义，通常HTTP状态码200为成功）
                if (res.statusCode === 200) {
                    // 在这里可以对返回的数据进行基础处理，比如统一格式等
                    resolve(res.data);
                } else {
                    // 非200状态码视为请求失败，进行错误处理
                    reject(new Error(`Request failed with status code ${res.statusCode}`));
                }
            },
            fail: (err) => {
                // 请求失败处理
                const errorMessage = `Request failed: ${err.errMsg}`;
                if (retries < MAX_RETRIES) {
                    // 如果未达到最大重试次数，则进行重试
                    console.warn(`Retrying request to ${url} (${retries + 1}/${MAX_RETRIES})...`);
                    setTimeout(() => {
                        request(url, method, data, header, retries + 1).then(resolve).catch(reject);
                    }, 1000); // 等待1秒后重试
                } else {
                    // 达到最大重试次数，最终失败
                    reject(new Error(errorMessage));
                }
            }
        });
    });
}

// 导出request函数
export default request;